package BinaryTree;

public class UsePreAndInCreateTree {
    class TreeNode{
         int val;
         TreeNode left;
         TreeNode right;
         public TreeNode(int val ){
             this.val =val;
         }
        public int preIndex;
        public TreeNode buildTree(int[] preorder, int[] inorder) {
            return buildTreeChild(preorder,inorder,0,inorder.length-1);
        }
        public TreeNode buildTreeChild(int[] preorder, int[] inorder,int inbegin,int inend) {
            if(inbegin > inend){
                return null;
            }
            TreeNode root =new TreeNode(preorder[preIndex]);
            int  rootIndex = finVal(inorder,inbegin,inend,preorder[preIndex]);
            preIndex++;
            root.left =buildTreeChild(preorder,inorder,inbegin,rootIndex-1);
            root.right =buildTreeChild(preorder,inorder,rootIndex+1,inend);
            return root;
        }
        private int finVal (int[] inorder,int inbegin, int inend,int val){
            for(int i = inbegin;i<=inend;i++){
                if(inorder[i]==val) {
                    return i;
                }
            }
            return -1;
        }
    }
}
